package com.example.springstudy.service;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
/**
 * springboot 中的事务是如何使用的
 * propagation
 *  REQUIRED: 使用当前的事务，如果当前没有事务侧创建一个，有的话就加入
 *  SUPPORTS: 外层没有事务侧不会创建事务，是否有事务取决于调用的方法上
 *              是否有事务
 *  MANDATORY: 强制在运行的时候必须调用者必须有事务的存在，否则会报错
 *  REQUIRES_NEW: 如果当前有事务的存在，则挂起该事务，并创建一个事务给
 *              自己使用(两个事务互不干扰)，如果没有事务 侧和REQUIRED
 *              一致
 *  NOT_SUPPORTED: 不会在任何情况下使用事务
 *  NEVER:有事务侧报错
 *  NESTED: 如果当前有事务，侧开启子事务（嵌套事务）嵌套事务是独立提交
 *  或者回滚；
 *  如果当前没有事务，侧创建，如果主事务提交，则会携带一起提交，回滚一起回滚，
 *  但子事务异常，使用try catch父事务可以滚或不滚
 * */
public class StudyTransService {
    @Transactional(propagation = Propagation.NESTED)
    public void test1() {

    }
}
